iT邦幫忙

2023 iThome 鐵人賽

DAY 19
0

什麼是OAuth?

OAuth是一個授權框架,讓網站能夠請求對另一個網站使用者的有線訪問。然後使用者無需暴露他們的登入憑據給請求的網站,所以使用者可以自己決定他們想共享的資料。

像是 HackMD 可以利用 Google 帳號登錄這樣。

OAuth 2.0 是如何運作的?

我們來用 Google 作為例子:

  1. 瀏覽器會先將使用者導致 Google 身份驗證的頁面,並透過 Google 這邊進行驗證
  2. 身份驗證成功後,使用者會被詢問是否同意取得一些資料(加一些 Line 好友也有這些東西)。可能是 Email,大頭照之類的。
  3. 當使用者同意之後,瀏覽器就會把使用者帶回原本的網站中。
  4. 因為使用者已經授權,所以網站就可以在 Google 那邊存取使用者同意的資料。

OAuth身份驗證漏洞

  • 客戶端中的漏洞
    • 隱式授予型別LABS的實施不當
    • CSRF保護有缺陷
  • OAuth服務中的漏洞
    • 洩露授權程式和訪問令牌
    • 缺陷範圍驗證
    • 未經驗證的使用者註冊

客戶端中的漏洞

隱式授予型別的實施不當

網站如果要在使用者關閉頁面後維持對話,他就需要將使用者資料儲存在某個地方。為了解決這個問題,Client端通常會在 POST 請求中將資料傳給Server,然後給使用者一個 Cookie。如果 Server 沒有將資料進行比較,就有可能給駭客一個機會偷發假資料給 Server 冒充任何使用者。

CSRF保護有缺陷

OAuth中有很多元件強烈建議要用的,state 就是其中一個。
在理想的情況下,state 應該要有個不可預測的值作為 CSRF 令牌形式在網站(Client)與OAuth服務之間傳遞。如果授權中沒有傳送 state 的值,意味著在欺騙使用者的瀏覽器 OAuth 之前,駭客可以自己啟動 OAuth。


上一篇
[Day 18]JWT(JSON Web Tokens)漏洞
下一篇
[Day 20]爭用條件漏洞
系列文
從 Moblie Development 主題被損友洗腦鬼轉 Security 的我真的可以完賽嗎?30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言